# -!- coding: utf-8 -!-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者：cacho_37967865
#博客：https://blog.csdn.net/sinat_37967865
#文件：dealGif.py
#日期：2019-10-19
#备注：对gif图片处理
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

import os
from PIL import Image,ImageSequence

input_dir = './'

# 将gif格式图片解析成单个图片（只能拆成PNG格式）
def split_gif(gif_file):
    i = 500
    os.chdir(input_dir)
    img = Image.open(gif_file)
    try:
        while True:
            current = img.tell()
            img.save(str(i) + '-' + str(current) + '.png')      # 只能拆成PNG格式
            i = i - 1
            img.seek(current + 1)
    except:
        pass


# 对gif图片进行反转处理
def PIL_gif(gif_file):
    os.chdir(input_dir)
    img = Image.open(gif_file)
    info = img.info
    dura = info['duration']  # 总间隔时间
    print(info)
    # 判断该图片是否为动态图片及其帧数
    print(img.is_animated, img.n_frames)
    if img.is_animated:
        # 使用ImageSequence模块的迭代器去遍历gif动图的每一帧，然后放到frames列表里
        frames = [f.copy() for f in ImageSequence.Iterator(img)]
        frames.reverse()  # 内置列表倒序方法
        # 将倒序后的所有帧图像保存下来
        frames[0].save('out.gif', save_all=True, append_images=frames[1:], loop=0, duration=dura)
